/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package WebCrawlerBD;

/**
 *
 * @author cecv
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;



public class ConexionBD {

    private String servidor="127.0.0.1";
    private String puerto="5432";
    private String bD="postgres";
    private String usuario="postgres";
    private String clave="postgres";
    private String url="jdbc:postgresql://"+servidor+":"+puerto+"/"+bD;
    private Connection cnx_conn = null;
    public static int idIngreso;
    private static ConexionBD obj_instancia = null;


    private ConexionBD() {
        try {

            //obtenemos el driver de para postgre
            Class.forName("org.postgresql.Driver");
            //obtenemos la conexión
            cnx_conn = DriverManager.getConnection(url, usuario, clave);
            if (cnx_conn != null) {
                //System.out.println("CONEXION : El XML de conexion se proceso correctamente");
                //System.out.println("CONEXION : Conexión a base de datos " + bD + " : OK");
            }
        } catch (SQLException e) {
            System.out.println(e);
        } catch (ClassNotFoundException e) {
            System.out.println(e);
        }
    }

    public Connection getCnx_conn() {
        return cnx_conn;
    }

    public void setCnx_conn(Connection cnx_conn) {
        this.cnx_conn = cnx_conn;
    }

    public static ConexionBD getInstancia() {
        if (obj_instancia == null) {
            obj_instancia = new ConexionBD();
        }
        return obj_instancia;
    }

    public void conectar() {
        //Inicia una conexión a la BD
        try {
            if (this.cnx_conn.isClosed()) {
                this.cnx_conn = (DriverManager.getConnection(url, usuario, clave));
            }
        } catch (SQLException error) {
        }
    }

    public void desconectar() {
        //Finaliza la conexión a la BD
        try {
            this.cnx_conn.close();
        } catch (SQLException error) {
        }
    }

    public int ejecutarComando(String str_sentencia) {
        /* Este método ejecuta la instrucción PostgreSQL en str_sentencia.
         * Las intrucciones posibles para str_sentencia pueden ser:
         *   INSERT, UPDATE o DELETE
         */
        Statement stm_intruccion;
        try {
            this.conectar();
            stm_intruccion = this.cnx_conn.createStatement();
            //System.out.println("Hasta aca bien");
            stm_intruccion.execute(str_sentencia);
            return 1;
        } catch (SQLException error) {
            System.out.println("ERROR EN QUERY : " + str_sentencia);
            return -1;
        }
    }

    public ResultSet realizarConsulta(
            String str_sentencia) {
        /* Este método realiza la consulta indicada en la instrucción PostgreSQL
         * en str_sentencia y devuelve el ResultSet que contiene los registros
         * de resultado. La instrucción que se puede ejecutar es:
         *   SELECT
         */
        this.conectar();
        ResultSet resultado = null;
        Statement stm_intruccion;

        try {
            this.conectar();
            stm_intruccion =
                    this.cnx_conn.createStatement();
            resultado =
                    stm_intruccion.executeQuery(str_sentencia);
        } catch (SQLException error) {
        } finally {
            this.desconectar();
        }

        return resultado;
    }
}
